/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sisvoto.modelo;

import java.awt.Component;
import java.awt.Image;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;

import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import sisvoto.DAO.ConsultasBD;
import sisvoto.ModeloDAO.ImagenPartidoDAO;

@Entity
public class ImagenPartido implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(nullable = false)
    private Integer idimagen;
    @Lob
    @Column(name = "imagen")
    private byte[] imagen;
    @ManyToOne
    private PartidoElectoral partido;

    public Integer getIdimagen() {
        return idimagen;
    }

    public void setIdimagen(Integer idimagen) {
        this.idimagen = idimagen;
    }

    public byte[] getImagen() {
        return imagen;
    }

    public void setImagen(byte[] imagen) {
        this.imagen = imagen;
    }

    public PartidoElectoral getPartido() {
        return partido;
    }

    public void setPartido(PartidoElectoral partido) {
        this.partido = partido;
    }

    public boolean guardarImagen(String direccion, PartidoElectoral partido, Component c) throws IOException {

        ImagenPartido i = new ImagenPartido();
        File f = new File(direccion);
        InputStream is = new FileInputStream(f);
        byte[] buffer = new byte[(int) f.length()];
        int reads = is.read(buffer);
        i.setImagen(buffer);
        i.setPartido(partido);

        ImagenPartidoDAO img = new ImagenPartidoDAO(i);

        try {
            img.update();
            img.persist();
            return true;
        } catch (Exception e) {
            System.out.println(e);
            return false;
        }
    }

    public Image cargarImagen(Integer id) throws IOException {

        ImagenPartido i = new ImagenPartido();
        ImagenPartidoDAO img = new ImagenPartidoDAO(i);
        List<ImagenPartido> auxImg = new ConsultasBD().buscarPOR("ImagenPartido", "partido", "'" + String.valueOf(id) + "'");
        if (auxImg.size() != 0) {
            i = auxImg.get(0);
        } else {
            return null;
        }
        System.out.println(i.getIdimagen());
        byte[] im = i.getImagen();
        ByteArrayInputStream bis = new ByteArrayInputStream(im);
        Iterator readers = ImageIO.getImageReadersByFormatName("jpeg");
        ImageReader reader = (ImageReader) readers.next();
        Object source = bis;
        ImageInputStream iis = ImageIO.createImageInputStream(source);
        reader.setInput(iis, true);
        ImageReadParam param = reader.getDefaultReadParam();
        Image image = reader.read(0, param);

        if (image != null) {
            return image;
        } else {
            return null;
        }
    }

    public void eliminarImagen(ImagenPartido i) {
        ArrayList<ImagenPartido> auxImg = (ArrayList<ImagenPartido>)new ConsultasBD().buscarPOR("ImagenPartido", "partido", "'" + i.getPartido().getId() + "'");
        if (!auxImg.isEmpty()) {
            ImagenPartido a= auxImg.get(0);
            ImagenPartidoDAO img = new ImagenPartidoDAO(a);
            try {
                img.update();
                img.remove();     
            } catch (Exception e) {
                System.out.println("No se puede eliminar la imagen del partido"); 
            }
        }
    }
}
